跳至主要内容

Rootfs A/B 備援

在 NVIDIA Jetson 設備上實現 Rootfs A/B 備援機制的完整指南。


概述

Rootfs A/B 備援 提供:

  • 系統備援:兩個獨立的 rootfs 分區(A 和 B)
  • 自動回退:啟動失敗時切換到備份
  • 無縫更新:更新時不影響當前運作
  • 災難恢復:失敗時自動恢復

Root 檔案系統備援

Jetson Linux 在 NVIDIA® Jetson Orin 系列 上提供 root 檔案系統備援支援。

它使用兩個 root 檔案系統:

  • Rootfs A:儲存在通常的檔案系統分區(APP)
  • Rootfs B:儲存在新的分區(APP_b),位於 APP 之後

Rootfs A/B 分區佈局

每個 rootfs 都是獨立的,佔用一個插槽:"slot A"或"slot B"。

  • Bootloader A 始終與 rootfs A 一起啟動
  • Bootloader B 始終與 rootfs B 一起啟動

Bootloader 和 Rootfs

  • Boot ROM 從 BR-BCT 或 Scratch 暫存器中獲取目標插槽編號。
  • 載入對應的 Bootloader 階段並啟動到指定的 rootfs 分區。

Bootloader 和 Rootfs


實施指南

步驟 1:準備主機

準備以下內容:

  • X86 主機,Ubuntu 22.04 或更高版本
  • 磁碟空間:至少 256 GiB
  • ⚠️ 不要使用 VM - 使用實體電腦
  • USB 線:Type-A 到 Type-C
  • Jetson 設備:AFE-R750 範例

主機準備

USB 連接

步驟 2:在主機上準備映像

下載映像

重要注意事項

  • ❌ 不要使用 root# 或滑鼠解壓縮
  • ✅ 下載與 Jetson 設備上 相同的 JetPack 映像版本

步驟 3:在主機上安裝先決條件

sudo usermod -aG dialout $USER
sudo apt update
sudo ./Linux_for_Tegra/tools/l4t_flash_prerequisites.sh
sudo reboot

步驟 4:獲取儲存參數

sudo fdisk -l /dev/nvme0n1

範例

  • Storage_real_size: 119.2 GB
  • Sectors_number: 250069680

Bootloader 和 Rootfs

步驟 5:修改設定檔

sudo gedit Linux_for_Tegra/tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml

num_sectors 設置為 Sectors_number。

Bootloader 和 Rootfs

步驟 6:將設備設置為恢復模式

  1. 關閉 Jetson 設備

  2. 連接 USB 到 FLASH 埠 電源關閉並連接

  3. 打開 底蓋 恢復設置

  4. 設置 RST_RCOVY 引腳 2 為 ON

  5. 電源按鈕 恢復引腳

步驟 7:驗證連接

在主機上打開終端並執行:

lsusb

驗證 AFE-R750 是否在恢復模式下被檢測到。

連接驗證

步驟 8:使用備援閃爍映像

cd Linux_for_Tegra

AGX Orin eMMC

sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./flash.sh jetson-agx-orin-devkit mmcblk0p1

AGX Orin NVMe: 根據 SSD 容量調整 -S 參數

sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml" \
-S '<58GiB>' \
--showlogs \
--network usb0 \
jetson-agx-orin-devkit \
nvme0n1p1

Orin NX NVMe

sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml" \
-S `<58GiB>` \
--showlogs \
--network usb0 \
jetson-orin-nano-devkit \
internal

注意Storage_real_size 的一半(僅整數)。

  • 119.2 / 2 = 58.6 → 58 GiB

步驟 9:檢查備援功能

sudo nvbootctrl -t rootfs dump-slots-info
sudo nvbootctrl -t rootfs set-active-boot-slot `1`
sudo reboot

重新啟動後,再次檢查插槽資訊 - Rootfs 已更改。

參考


← 返回 解決方案 總覽